﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QldtSdh.BLL;
using QldtSdh.DAL.Models;
using QldtSdh.GUI.Utils;

namespace QldtSdh.GUI.DuLieu
{
    public partial class FormQuanlyLopKhoaNganh : QldtSdh.GUI.Common.BaseDialog
    {
        bool allowUpdate = false;
        public FormQuanlyLopKhoaNganh()
        {
            InitializeComponent();
            gridDataLop.AddRowIndexing();
            gridDataDSHV.AddRowIndexing();
            InitGridLop();
            InitGridHocVien();
            LoadKhoaHoc();
        }

        void InitGridLop()
        {
            gridDataLop.AutoGenerateColumns = false;
            colTenLop.DataPropertyName = "TenLopKhoaNganh";
            colTenCSDT.DataPropertyName = "TenCoSoDaoTao";
            colChuongTrinhDaoTao.DataPropertyName = "TenChuongTrinhDaoTao";
        }

        void InitGridHocVien()
        {
            gridDataDSHV.AutoGenerateColumns = false;
            colMaHocVien.DataPropertyName = "MaHocVien";
            colHoDem.DataPropertyName = "HoDem";
            colTen.DataPropertyName = "Ten";
            colGioiTinh.DataPropertyName = "_GioiTinhStr";
            colNgaySinh.DataPropertyName = "NgaySinh";
            colDiaChi.DataPropertyName = "DiaChi";
        }

        void LoadKhoaHoc()
        {
            allowUpdate = false;
            var ls = BizKhoaHoc.GetList();
            cmbKhoaHoc.DataSource = ls;
            cmbKhoaHoc.DisplayMember = "TenKhoaHoc";
            cmbKhoaHoc.ValueMember = "MaKhoaHocGUID";

            if (!(ls != null && ls.Count > 0))
            {
                btnThemLop.Enabled = btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                btnImportDSHV.Enabled = btnThemHocVien.Enabled = btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
            }
            allowUpdate = true;
            LoadNganhHoc();
        }

        void LoadNganhHoc()
        {
            allowUpdate = false;
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            if (khoaHoc != null)
            {
                var ls = BizKhoaHoc_NganhDaoTao.GetListByKhoaHoc2(khoaHoc.MaKhoaHocGUID);
                cmbNganhHoc.DataSource = ls;
                cmbNganhHoc.DisplayMember = "TenNganhDaoTao";
                cmbNganhHoc.ValueMember = "MaNganhDaoTaoGUID";

                if (ls != null && ls.Count > 0)
                {
                    btnThemLop.Enabled = true;
                    btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                    btnImportDSHV.Enabled = btnThemHocVien.Enabled = btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
                }
                else
                {
                    btnThemLop.Enabled = btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                    btnImportDSHV.Enabled = btnThemHocVien.Enabled = btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
                }
            }
            else
            {
                cmbNganhHoc.DataSource = null;
                btnThemLop.Enabled = btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                btnImportDSHV.Enabled = btnThemHocVien.Enabled = btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
            }
            allowUpdate = true;
            LoadLop();
        }

        void LoadLop()
        {
            allowUpdate = false;
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganhHoc = cmbNganhHoc.SelectedItem as NganhDaoTao;
            if (khoaHoc != null && nganhHoc != null)
            {
                var ls = BizLopKhoaNganh.GetList(khoaHoc.MaKhoaHocGUID, nganhHoc.MaNganhDaoTaoGUID);
                bdLop.DataSource = ls;
                gridDataLop.DataSource = bdLop;
                if (ls != null && ls.Count > 0)
                {
                    lbSoLop.Text = "Danh sách này có: " + ls.Count + " lớp";
                    btnSuaLop.Enabled = btnXoaLop.Enabled = true;
                    btnImportDSHV.Enabled = btnThemHocVien.Enabled = true;
                    btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
                }
                else
                {
                    lbSoLop.Text = "Danh sách này có: 0 lớp";
                    btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                    btnImportDSHV.Enabled = btnThemHocVien.Enabled = btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
                }
            }
            else
            {
                bdLop.DataSource = null;
                lbSoLop.Text = "Danh sách này có: 0 lớp";
                btnSuaLop.Enabled = btnXoaLop.Enabled = false;
                btnImportDSHV.Enabled = btnThemHocVien.Enabled = false;
                btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
            }
            allowUpdate = true;
            LoadDSHV();
        }

        void LoadDSHV()
        {
            allowUpdate = false;
            var lop = bdLop.Current as LopKhoaNganh;
            if (lop != null)
            {
                var ls = BizHocVien.GetList(lop.MaLopKhoaNganhGUID);
                bdDSHV.DataSource = ls;
                gridDataDSHV.DataSource = bdDSHV;
                if (ls != null && ls.Count > 0)
                {
                    lbSoHocVien.Text = "Danh sách này có: " + ls.Count + " học viên";
                    btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = true;
                }
                else
                {
                    lbSoHocVien.Text = "Danh sách này có: 0 học viên";
                }
            }
            else
            {
                lbSoHocVien.Text = "Danh sách này có: 0 học viên";
                bdDSHV.DataSource = null;
                btnSuaHocVien.Enabled = btnXoaHocVien.Enabled = false;
            }
            allowUpdate = true;
        }

        private void bdLop_CurrentChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                LoadDSHV();
                var current = bdLop.Current as LopKhoaNganh;
                if (current != null)
                {
                    btnXoaLop.Enabled = btnSuaLop.Enabled = true;
                }
                else
                    btnXoaLop.Enabled = btnSuaLop.Enabled = false;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganhHoc = cmbNganhHoc.SelectedItem as NganhDaoTao;
            if (khoaHoc != null && nganhHoc != null)
            {
                var dlg = new DuLieu.FormQuanLyLopKhoaNganh_ChiTiet(khoaHoc, nganhHoc);
                dlg.OnChanged += (o, t) =>
                {
                    LoadLop();
                };
                dlg.ShowDialog();
            }
        }

        private void btnSuaLop_Click(object sender, EventArgs e)
        {
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganhHoc = cmbNganhHoc.SelectedItem as NganhDaoTao;
            var lop = bdLop.Current as LopKhoaNganh;
            if (khoaHoc != null && nganhHoc != null && lop != null)
            {
                var dlg = new DuLieu.FormQuanLyLopKhoaNganh_ChiTiet(khoaHoc, nganhHoc, lop);
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    LoadLop();
            }
        }

        private void btnXoaLop_Click(object sender, EventArgs e)
        {
            var lop = bdLop.Current as LopKhoaNganh;
            if (lop != null)
            {
                if (DialogUtils.ShowOKCancel(NOTIFY_CONSTANT_STRING.DELETE) == System.Windows.Forms.DialogResult.OK)
                {
                    var rs = BizLopKhoaNganh.Delete(lop.MaLopKhoaNganhGUID);
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                        bdLop.RemoveCurrent();
                    else
                        DialogUtils.ShowError(string.Format(NOTIFY_CONSTANT_STRING.DELETE, ENTITY_NAME.LOPKHOANGANH));
                }
            }
        }

        private void cmbKhoaHoc_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                LoadNganhHoc();
            }
        }

        private void cmbNganhHoc_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                LoadLop();
            }
        }

        private void btnThemHocVien_Click(object sender, EventArgs e)
        {
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganh = cmbNganhHoc.SelectedItem as NganhDaoTao;
            var lop = bdLop.Current as LopKhoaNganh;
            if (khoaHoc != null && nganh != null && lop != null)
            {
                var frm = new FormQuanLyHocVien_ChiTiet(khoaHoc, nganh, lop);
                frm.OnChanged += (o, t) =>
                {
                    LoadDSHV();
                };
                frm.ShowDialog();
            }
        }

        private void btnSuaHocVien_Click(object sender, EventArgs e)
        {
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganh = cmbNganhHoc.SelectedItem as NganhDaoTao;
            var lop = bdLop.Current as LopKhoaNganh;
            var hocVien = bdDSHV.Current as HocVien;
            if (khoaHoc != null && nganh != null && lop != null && hocVien != null)
            {
                var frm = new FormQuanLyHocVien_ChiTiet(khoaHoc, nganh, lop, hocVien);
                if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    LoadDSHV();
            }
        }

        private void btnXoaHocVien_Click(object sender, EventArgs e)
        {
            var hocVien = bdDSHV.Current as HocVien;
            if (hocVien != null)
            {
                if (DialogUtils.ShowOKCancel(string.Format(NOTIFY_CONSTANT_STRING.DELETE, ENTITY_NAME.HOCVIEN)) == System.Windows.Forms.DialogResult.OK)
                {
                    var rs = BizHocVien.Delete(hocVien.MaHocVien);
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                        bdDSHV.RemoveCurrent();
                    else
                        DialogUtils.ShowError(string.Format(ERROR_CONSTANT_STRING.LOI_XOA, ENTITY_NAME.HOCVIEN));
                }
            }
        }

        private void btnImportDSHV_Click(object sender, EventArgs e)
        {
            var khoaHoc = cmbKhoaHoc.SelectedItem as KhoaHoc;
            var nganh = cmbNganhHoc.SelectedItem as NganhDaoTao;
            var lop = bdLop.Current as LopKhoaNganh;
            if (khoaHoc != null && nganh != null && lop != null)
            {
                var frm = new FormQuanlyHocVien_Import(khoaHoc, nganh, lop);
                frm.OnChanged += (o, t) =>
                {
                    LoadDSHV();
                };
                frm.ShowDialog();
            }
        }
    }
    [DefaultPropertyAttribute("MaHocVien")]
    public class HocVien_PropertyGrid
    {
        private const string A = "A. Thông tin học viên";
        [CategoryAttribute(A), DisplayName("1. Mã học viên")]
        public string MaHocVien { get; set; }
        [CategoryAttribute(A), DisplayName("2. Họ tên học viên")]
        public string HoTen { get; set; }
        [CategoryAttribute(A), DisplayName("3. Giới tính")]
        public string GioiTinh { get; set; }
        [CategoryAttribute(A), DisplayName("4. Ngày sinh")]
        public string NgaySinh { get; set; }
        [CategoryAttribute(A), DisplayName("5. Nơi sinh")]
        public string NoiSinh { get; set; }
        [CategoryAttribute(A), DisplayName("6. Quốc tịch")]
        public string QuocTich { get; set; }
        [CategoryAttribute(A), DisplayName("7. Địa chỉ")]
        public string DiaChi { get; set; }
        [CategoryAttribute(A), DisplayName("8. Số điện thoại")]
        public string SoDienThoai { get; set; }
        [CategoryAttribute(A), DisplayName("9. Địa chỉ email")]
        public string Email { get; set; }
    }
}
